home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume14 / boss / patch3 next >
Encoding:
Internet Message Format  |  1991-08-26  |  34.3 KB

  1. Path: uunet!cs.utexas.edu!sun-barr!cronkite.Central.Sun.COM!exodus!trantor.harris-atd.com
  2. From: chuck@trantor.harris-atd.com (Chuck Musciano)
  3. Newsgroups: comp.sources.x
  4. Subject: v14i005: Boss, Patch3, Part01/01
  5. Message-ID: <19070@exodus.Eng.Sun.COM>
  6. Date: 27 Aug 91 05:33:15 GMT
  7. References: <csx-14i005-boss@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1149
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: Chuck Musciano <chuck@trantor.harris-atd.com>
  13. Posting-number: Volume 14, Issue 5
  14. Archive-name: boss/patch3
  15. Patch-To: boss: Volume 10, Issue 3-8, 91
  16. Patch-To: boss: Volume 11, Issue 4, 81
  17.  
  18.      This patch brings Boss 1.0b to version 1.0c, fixing a critical bug in 
  19. downloading and a number of minor problems.  If you previously had 
  20. difficulty downloading data to your Casio BOSS, this patch should clear
  21. up any problems.
  22.  
  23.      You'll need Boss 1.0b to apply this patch.  Sources are available
  24. via FTP and archive server on uunet.uu.net, and via FTP from
  25. trantor.harris-atd.com, in the /pub/suntools/boss directory.
  26.  
  27.  
  28. Chuck Musciano                ARPA  : chuck@trantor.harris-atd.com
  29. Harris Corporation             Usenet: ...!uunet!x102a!trantor!chuck
  30. PO Box 37, MS 3A/1912            AT&T  : (407) 727-6131
  31. Melbourne, FL 32902            FAX   : (407) 729-3363
  32.  
  33. A good newspaper is never good enough,
  34.     but a lousy newspaper is a joy forever.        -- Garrison Keillor
  35.  
  36. #!/bin/sh
  37. # This is a shell archive (produced by shar 3.49)
  38. # To extract the files from this archive, save it to a file, remove
  39. # everything above the "!/bin/sh" line above, and type "sh file_name".
  40. #
  41. # made 07/24/1991 13:42 UTC by chuck@pluto
  42. # Source directory /tmp_mnt/net/melmac/home/chuck/projects/release/boss/1.0/patch03
  43. #
  44. # existing files will NOT be overwritten unless -c is specified
  45. #
  46. # This shar contains:
  47. # length  mode       name
  48. # ------ ---------- ------------------------------------------
  49. #  32133 -rw-rw-r-- patch
  50. #
  51. # ============= patch ==============
  52. if test -f 'patch' -a X"$1" != X"-c"; then
  53.     echo 'x - skipping patch (File already exists)'
  54. else
  55. echo 'x - extracting patch (Text)'
  56. sed 's/^X//' << 'SHAR_EOF' > 'patch' &&
  57. *** Makefile.orig    Wed Jul 24 09:38:23 1991
  58. --- Makefile    Fri May 17 09:10:01 1991
  59. ***************
  60. *** 22,28 ****
  61. X  
  62. X  OFILES        = about.o boss.o boss_ui.o busy.o calentool.o casio_master.o casio_slave.o \
  63. X            database.o do_clear.o do_load.o do_port.o do_schedule.o do_store.o \
  64. !           expand.o filename_completion.o list_misc.o misc.o object.o packet.o \
  65. X            parse.o pinned_menu_notify.o place_dialog.o print.o \
  66. X            record.o send_mail.o window_misc.o
  67. X  
  68. --- 22,28 ----
  69. X  
  70. X  OFILES        = about.o boss.o boss_ui.o busy.o calentool.o casio_master.o casio_slave.o \
  71. X            database.o do_clear.o do_load.o do_port.o do_schedule.o do_store.o \
  72. !           expand.o filename_completion.o getopt.o list_misc.o misc.o object.o packet.o \
  73. X            parse.o pinned_menu_notify.o place_dialog.o print.o \
  74. X            record.o send_mail.o window_misc.o
  75. X  
  76. *** README.orig    Wed Jul 24 09:38:25 1991
  77. --- README    Wed Jul 24 09:36:03 1991
  78. ***************
  79. *** 17,23 ****
  80. X  /*    without prior permission from Harris Corporation.         */
  81. X  /************************************************************************/
  82. X  
  83. !             Boss Version 1.0
  84. X  
  85. X       Boss lets Casio BOSS users transfer data between their BOSS and
  86. X  a workstation.  Users can also convert BOSS schedule items to formats useful
  87. --- 17,23 ----
  88. X  /*    without prior permission from Harris Corporation.         */
  89. X  /************************************************************************/
  90. X  
  91. !             Boss Version 1.0c
  92. X  
  93. X       Boss lets Casio BOSS users transfer data between their BOSS and
  94. X  a workstation.  Users can also convert BOSS schedule items to formats useful
  95. *** Imakefile.orig    Wed Jul 24 09:38:25 1991
  96. --- Imakefile    Fri May 17 09:10:01 1991
  97. ***************
  98. *** 12,24 ****
  99. X  
  100. X  SRCS        = about.c boss.c boss_ui.c busy.c calentool.c casio_master.c casio_slave.c \
  101. X            database.c do_clear.c do_load.c do_port.c do_schedule.c do_store.c \
  102. !           expand.c filename_completion.c list_misc.c misc.c object.c packet.c \
  103. X            parse.y pinned_menu_notify.c place_dialog.c print.c \
  104. X            record.c send_mail.c window_misc.c
  105. X  
  106. X  OBJS        = about.o boss.o boss_ui.o busy.o calentool.o casio_master.o casio_slave.o \
  107. X            database.o do_clear.o do_load.o do_port.o do_schedule.o do_store.o \
  108. !           expand.o filename_completion.o list_misc.o misc.o object.o packet.o \
  109. X            parse.o pinned_menu_notify.o place_dialog.o print.o \
  110. X            record.o send_mail.o window_misc.o
  111. X  
  112. --- 12,24 ----
  113. X  
  114. X  SRCS        = about.c boss.c boss_ui.c busy.c calentool.c casio_master.c casio_slave.c \
  115. X            database.c do_clear.c do_load.c do_port.c do_schedule.c do_store.c \
  116. !           expand.c filename_completion.c getopt.c list_misc.c misc.c object.c packet.c \
  117. X            parse.y pinned_menu_notify.c place_dialog.c print.c \
  118. X            record.c send_mail.c window_misc.c
  119. X  
  120. X  OBJS        = about.o boss.o boss_ui.o busy.o calentool.o casio_master.o casio_slave.o \
  121. X            database.o do_clear.o do_load.o do_port.o do_schedule.o do_store.o \
  122. !           expand.o filename_completion.o getopt.o list_misc.o misc.o object.o packet.o \
  123. X            parse.o pinned_menu_notify.o place_dialog.o print.o \
  124. X            record.o send_mail.o window_misc.o
  125. X  
  126. *** boss.man.orig    Wed Jul 24 09:38:26 1991
  127. --- boss.man    Wed Mar 27 07:27:30 1991
  128. ***************
  129. *** 75,82 ****
  130. X  The text fields associated with \*(lqCasio-format file\*(rq and \*(lqASCII text file\*(rq
  131. X  provide file name completion, like \f2csh\fP(1), by typing
  132. X  a space or carriage return.
  133. ! .IP "\fBFile: Save Data...\fP"
  134. ! brings up the \fBSave Data\fP dialog box.  This dialog contains a non-exclusive
  135. X  setting labeled \*(lqStore items\*(rq that lets you choose which items are to
  136. X  be stored.  Only those items selected in this setting will be written to the
  137. X  destination selected.
  138. --- 75,82 ----
  139. X  The text fields associated with \*(lqCasio-format file\*(rq and \*(lqASCII text file\*(rq
  140. X  provide file name completion, like \f2csh\fP(1), by typing
  141. X  a space or carriage return.
  142. ! .IP "\fBFile: Store Data...\fP"
  143. ! brings up the \fBStore Data\fP dialog box.  This dialog contains a non-exclusive
  144. X  setting labeled \*(lqStore items\*(rq that lets you choose which items are to
  145. X  be stored.  Only those items selected in this setting will be written to the
  146. X  destination selected.
  147. *** boss_ui.c.orig    Wed Jul 24 09:38:29 1991
  148. --- boss_ui.c    Wed Jul 24 09:38:17 1991
  149. ***************
  150. *** 103,109 ****
  151. X          XV_KEY_DATA, INSTANCE, ip,
  152. X          MENU_ITEM,
  153. X              XV_KEY_DATA, INSTANCE, ip,
  154. !             MENU_STRING, "Port properties...",
  155. X              MENU_GEN_PROC, port_dialog,
  156. X              NULL,
  157. X          MENU_DEFAULT, 2,
  158. --- 103,109 ----
  159. X          XV_KEY_DATA, INSTANCE, ip,
  160. X          MENU_ITEM,
  161. X              XV_KEY_DATA, INSTANCE, ip,
  162. !             MENU_STRING, "Port Properties...",
  163. X              MENU_GEN_PROC, port_dialog,
  164. X              NULL,
  165. X          MENU_DEFAULT, 2,
  166. ***************
  167. *** 192,198 ****
  168. X          XV_KEY_DATA, INSTANCE, ip,
  169. X          XV_WIDTH, 256,
  170. X          XV_HEIGHT, 88,
  171. !         XV_LABEL, "Boss 1.0b",
  172. X          FRAME_CLOSED, FALSE,
  173. X          FRAME_SHOW_FOOTER, FALSE,
  174. X          FRAME_SHOW_RESIZE_CORNER, FALSE,
  175. --- 192,198 ----
  176. X          XV_KEY_DATA, INSTANCE, ip,
  177. X          XV_WIDTH, 256,
  178. X          XV_HEIGHT, 88,
  179. !         XV_LABEL, "Boss 1.0c",
  180. X          FRAME_CLOSED, FALSE,
  181. X          FRAME_SHOW_FOOTER, FALSE,
  182. X          FRAME_SHOW_RESIZE_CORNER, FALSE,
  183. ***************
  184. *** 1658,1666 ****
  185. X          XV_HELP_DATA, "boss:msg_1",
  186. X          XV_X, 222,
  187. X          XV_Y, 14,
  188. !         XV_WIDTH, 66,
  189. X          XV_HEIGHT, 13,
  190. !         PANEL_LABEL_STRING, "Boss 1.0b",
  191. X          PANEL_LABEL_BOLD, TRUE,
  192. X          NULL);
  193. X      return obj;
  194. --- 1658,1666 ----
  195. X          XV_HELP_DATA, "boss:msg_1",
  196. X          XV_X, 222,
  197. X          XV_Y, 14,
  198. !         XV_WIDTH, 64,
  199. X          XV_HEIGHT, 13,
  200. !         PANEL_LABEL_STRING, "Boss 1.0c",
  201. X          PANEL_LABEL_BOLD, TRUE,
  202. X          NULL);
  203. X      return obj;
  204. ***************
  205. *** 2063,2073 ****
  206. X      obj = xv_create(owner, PANEL_BUTTON,
  207. X          XV_KEY_DATA, INSTANCE, ip,
  208. X          XV_HELP_DATA, "boss:send_mail",
  209. !         XV_X, 215,
  210. X          XV_Y, 352,
  211. !         XV_WIDTH, 78,
  212. X          XV_HEIGHT, 20,
  213. !         PANEL_LABEL_STRING, "Send Mail",
  214. X          PANEL_NOTIFY_PROC, popup_send_mail,
  215. X          NULL);
  216. X      return obj;
  217. --- 2063,2073 ----
  218. X      obj = xv_create(owner, PANEL_BUTTON,
  219. X          XV_KEY_DATA, INSTANCE, ip,
  220. X          XV_HELP_DATA, "boss:send_mail",
  221. !         XV_X, 210,
  222. X          XV_Y, 352,
  223. !         XV_WIDTH, 87,
  224. X          XV_HEIGHT, 20,
  225. !         PANEL_LABEL_STRING, "Send Mail...",
  226. X          PANEL_NOTIFY_PROC, popup_send_mail,
  227. X          NULL);
  228. X      return obj;
  229. *** casio.h.orig    Wed Jul 24 09:38:34 1991
  230. --- casio.h    Wed Jul 17 08:26:00 1991
  231. ***************
  232. *** 24,33 ****
  233. X  /************************************************************************/
  234. X  
  235. X  #define        PACKET_START        ':'
  236. ! #define        XMIT_TERMINATE        '!'
  237. ! #define        RCV_ERROR        '"'
  238. ! #define        PACKET_ACK        '#'
  239. ! #define        MODE_ERROR        '$'
  240. X  
  241. X  PUBLIC    int    open_casio();
  242. X  PUBLIC    int    read_casio();
  243. --- 24,34 ----
  244. X  /************************************************************************/
  245. X  
  246. X  #define        PACKET_START        ':'
  247. ! #define        XMIT_TERMINATE        0x21
  248. ! #define        RCV_ERROR        0x22
  249. ! #define        PACKET_ACK        0x23
  250. ! #define        MODE_ERROR        0x24
  251. ! #define        XMIT_ERROR        0x3f
  252. X  
  253. X  PUBLIC    int    open_casio();
  254. X  PUBLIC    int    read_casio();
  255. *** casio_master.c.orig    Wed Jul 24 09:38:35 1991
  256. --- casio_master.c    Wed Jun 19 10:18:45 1991
  257. ***************
  258. *** 220,227 ****
  259. X  byte    b;
  260. X  
  261. X  {
  262. !     buf[0] = FLUSH_CASIO;
  263. X      buf[1] = b;
  264. X      if (do_write(buf, 2))
  265. X         read_reply();
  266. X  }
  267. --- 220,239 ----
  268. X  byte    b;
  269. X  
  270. X  {
  271. !     buf[0] = UNGET_BYTE;
  272. X      buf[1] = b;
  273. X      if (do_write(buf, 2))
  274. +        read_reply();
  275. + }
  276. + /************************************************************************/
  277. + EXPORT    wait_casio(delay)
  278. + int    delay;
  279. + {
  280. +     buf[0] = WAIT_CASIO;
  281. +     bcopy(&delay, buf + 1, sizeof(int));
  282. +     if (do_write(buf, 5))
  283. X         read_reply();
  284. X  }
  285. *** casio_slave.c.orig    Wed Jul 24 09:38:36 1991
  286. --- casio_slave.c    Wed Jun 19 10:18:44 1991
  287. ***************
  288. *** 292,297 ****
  289. --- 292,304 ----
  290. X            case UNGET_BYTE           : if ((b = getc(commands_in)) != EOF)
  291. X                                 unget_byte(b);
  292. X                              break;
  293. +           case WAIT_CASIO           : if (fread(&timeout, 1, sizeof(int), commands_in) == sizeof(int)) {
  294. +                                usleep(timeout * 1000);
  295. +                                return_result(NULL);
  296. +                                }
  297. +                             else
  298. +                                return_result("Error reading WAIT_CASIO parameters in Casio slave");
  299. +                             break;
  300. X            default                   : return_result("Unknown protocol command: %d", cmd);
  301. X                              break;
  302. X            }
  303. *** do_load.c.orig    Wed Jul 24 09:38:38 1991
  304. --- do_load.c    Wed Jul 17 15:42:24 1991
  305. ***************
  306. *** 55,66 ****
  307. X            xv_set(dialog->casio_source,
  308. X                      PANEL_VALUE, casio_file,
  309. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  310. !                     PANEL_NOTIFY_STRING, "\n\r ",
  311. X                      PANEL_INACTIVE, TRUE,
  312. X                   NULL);
  313. X            xv_set(dialog->ascii_source,
  314. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  315. !                     PANEL_NOTIFY_STRING, "\n\r ",
  316. X                      PANEL_INACTIVE, TRUE,
  317. X                   NULL);
  318. X            xv_set(dialog->source, PANEL_VALUE, 0, NULL);
  319. --- 55,66 ----
  320. X            xv_set(dialog->casio_source,
  321. X                      PANEL_VALUE, casio_file,
  322. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  323. !                     PANEL_NOTIFY_STRING, "\n\r\t ",
  324. X                      PANEL_INACTIVE, TRUE,
  325. X                   NULL);
  326. X            xv_set(dialog->ascii_source,
  327. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  328. !                     PANEL_NOTIFY_STRING, "\n\r\t ",
  329. X                      PANEL_INACTIVE, TRUE,
  330. X                   NULL);
  331. X            xv_set(dialog->source, PANEL_VALUE, 0, NULL);
  332. *** do_schedule.c.orig    Wed Jul 24 09:38:40 1991
  333. --- do_schedule.c    Wed Jul 17 15:42:23 1991
  334. ***************
  335. *** 188,194 ****
  336. X            xv_set(dialog->appt_file,
  337. X                      PANEL_VALUE, appts_file,
  338. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  339. !                     PANEL_NOTIFY_STRING, "\n\r ",
  340. X                      PANEL_INACTIVE, FALSE,
  341. X                   NULL);
  342. X            xv_set(dialog->schedule_format, PANEL_VALUE, 0, NULL);
  343. --- 188,194 ----
  344. X            xv_set(dialog->appt_file,
  345. X                      PANEL_VALUE, appts_file,
  346. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  347. !                     PANEL_NOTIFY_STRING, "\n\r\t ",
  348. X                      PANEL_INACTIVE, FALSE,
  349. X                   NULL);
  350. X            xv_set(dialog->schedule_format, PANEL_VALUE, 0, NULL);
  351. *** do_store.c.orig    Wed Jul 24 09:38:41 1991
  352. --- do_store.c    Wed Jul 17 15:42:23 1991
  353. ***************
  354. *** 57,68 ****
  355. X            xv_set(dialog->casio_dest,
  356. X                      PANEL_VALUE, casio_file,
  357. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  358. !                     PANEL_NOTIFY_STRING, "\n\r ",
  359. X                      PANEL_INACTIVE, TRUE,
  360. X                   NULL);
  361. X            xv_set(dialog->ascii_dest,
  362. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  363. !                     PANEL_NOTIFY_STRING, "\n\r ",
  364. X                      PANEL_INACTIVE, TRUE,
  365. X                   NULL);
  366. X            xv_set(dialog->store_data, PANEL_VALUE, (1 << MAX_OBJECT_KINDS) - 1, NULL);
  367. --- 57,68 ----
  368. X            xv_set(dialog->casio_dest,
  369. X                      PANEL_VALUE, casio_file,
  370. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  371. !                     PANEL_NOTIFY_STRING, "\n\r\t ",
  372. X                      PANEL_INACTIVE, TRUE,
  373. X                   NULL);
  374. X            xv_set(dialog->ascii_dest,
  375. X                      PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
  376. !                     PANEL_NOTIFY_STRING, "\n\r\t ",
  377. X                      PANEL_INACTIVE, TRUE,
  378. X                   NULL);
  379. X            xv_set(dialog->store_data, PANEL_VALUE, (1 << MAX_OBJECT_KINDS) - 1, NULL);
  380. *** filename_completion.c.orig    Wed Jul 24 09:38:42 1991
  381. --- filename_completion.c    Wed Jul 17 15:42:21 1991
  382. ***************
  383. *** 41,47 ****
  384. X  
  385. X      switch (event_action(event)) {
  386. X         case '\n' :
  387. !        case '\r' :
  388. X         case ' '  : if ((p = expand_filename((char *) xv_get(item, PANEL_VALUE))) == NULL)
  389. X                   window_bell(xv_get(item, XV_OWNER));
  390. X                    else
  391. --- 41,47 ----
  392. X  
  393. X      switch (event_action(event)) {
  394. X         case '\n' :
  395. !        case '\r' : 
  396. X         case ' '  : if ((p = expand_filename((char *) xv_get(item, PANEL_VALUE))) == NULL)
  397. X                   window_bell(xv_get(item, XV_OWNER));
  398. X                    else
  399. *** getopt.c.orig    Wed Jul 24 09:38:43 1991
  400. --- getopt.c    Fri May 17 09:10:22 1991
  401. ***************
  402. *** 0 ****
  403. --- 1,64 ----
  404. + /************************************************************************/
  405. + /*    Copyright 1987-1991 by Chuck Musciano and Harris Corporation     */
  406. + /*                                    */
  407. + /*    Full ownership of this software, and all rights pertaining to     */
  408. + /*    the for-profit distribution of this software, are retained by     */
  409. + /*    Chuck Musciano and Harris Corporation.  You are permitted to     */
  410. + /*    use this software without fee.  This software is provided "as     */
  411. + /*    is" without express or implied warranty.  You may redistribute     */
  412. + /*    this software, provided that this copyright notice is retained,    */
  413. + /*    and that the software is not distributed for profit.  If you     */
  414. + /*    wish to use this software in a profit-making venture, you must     */
  415. + /*    first license this code and its underlying technology from     */
  416. + /*    Harris Corporation.                         */
  417. + /*                                    */
  418. + /*    Bottom line: you can have this software, you can use it, you     */
  419. + /*    can give it away.  You just can't sell any or all parts of it     */
  420. + /*    without prior permission from Harris Corporation.         */
  421. + /************************************************************************/
  422. + #include    <stdio.h>
  423. + #include    "manifest.h"
  424. + /************************************************************************/
  425. + PRIVATE    delarg(argc, argv)
  426. + int    *argc;
  427. + char    **argv;
  428. + {    char    *p;
  429. +     while (*argv = *(argv+1))
  430. +        argv++;
  431. +     (*argc)--;
  432. + }
  433. + /************************************************************************/
  434. + EXPORT    char    getopt(argc, argv, opts, parm)
  435. + int    *argc;
  436. + char    **argv;
  437. + char    *opts;
  438. + char    **parm;
  439. + {    char    c, *p, *strcpy(), *index();
  440. +     int    killed;
  441. +     *parm = NULL;
  442. +     while (*argv && ((**argv != '-') || (*(*argv+1) == '\0')))
  443. +        argv++;
  444. +     if (*argv == NULL)
  445. +        return(EOF);
  446. +     c = *(*argv+1);
  447. +     *++(*argv) = '-';
  448. +     if (killed = (*(*argv+1) == '\0'))
  449. +        delarg(argc, argv);
  450. +     if ((p = index(opts, c)) == NULL)
  451. +        c = '\0';
  452. +     else if (*(p+1) == ':') {
  453. +        *parm = killed ? *argv : *argv+1;
  454. +        delarg(argc, argv);
  455. +        }
  456. +     return(c);
  457. + }
  458. *** misc.c.orig    Wed Jul 24 09:38:46 1991
  459. --- misc.c    Fri May 17 09:10:00 1991
  460. ***************
  461. *** 117,164 ****
  462. X  }
  463. X  
  464. X  /************************************************************************/
  465. - PRIVATE    delarg(argc, argv)
  466. - int    *argc;
  467. - char    **argv;
  468. - {    char    *p;
  469. -     while (*argv = *(argv+1))
  470. -        argv++;
  471. -     (*argc)--;
  472. - }
  473. - /************************************************************************/
  474. - EXPORT    char    getopt(argc, argv, opts, parm)
  475. - int    *argc;
  476. - char    **argv;
  477. - char    *opts;
  478. - char    **parm;
  479. - {    char    c, *p, *index();
  480. -     int    killed;
  481. -     *parm = NULL;
  482. -     while (*argv && ((**argv != '-') || (*(*argv+1) == '\0')))
  483. -        argv++;
  484. -     if (*argv == NULL)
  485. -        return(EOF);
  486. -     c = *(*argv+1);
  487. -     *++(*argv) = '-';
  488. -     if (killed = (*(*argv+1) == '\0'))
  489. -        delarg(argc, argv);
  490. -     if ((p = index(opts, c)) == NULL)
  491. -        c = '\0';
  492. -     else if (*(p+1) == ':') {
  493. -        *parm = killed ? *argv : *argv+1;
  494. -        delarg(argc, argv);
  495. -        }
  496. -     return(c);
  497. - }
  498. - /************************************************************************/
  499. X  EXPORT    int    is_empty(s)
  500. X  
  501. X  char    *s;
  502. --- 117,122 ----
  503. *** object.c.orig    Wed Jul 24 09:38:46 1991
  504. --- object.c    Wed Jul 17 15:18:34 1991
  505. ***************
  506. *** 24,29 ****
  507. --- 24,30 ----
  508. X  /************************************************************************/
  509. X  
  510. X  #include    "manifest.h"
  511. + #include    "packet.h"
  512. X  #include    "record.h"
  513. X  #include    "object.h"
  514. X  
  515. ***************
  516. *** 44,52 ****
  517. X  
  518. X  object    *obj;
  519. X  
  520. ! {
  521. !     if (obj->buf)
  522. !        free(obj->buf);
  523. X      free(obj);
  524. X  }
  525. X  
  526. --- 45,55 ----
  527. X  
  528. X  object    *obj;
  529. X  
  530. ! {    int    i;
  531. !     for (i = 0; i < MAX_FIELDS + 1; i++)
  532. !        if (obj->field[i])
  533. !           free(obj->field[i]);
  534. X      free(obj);
  535. X  }
  536. X  
  537. ***************
  538. *** 73,84 ****
  539. X  
  540. X      obj = create_object();
  541. X      obj->kind = OBJ_MEMO;
  542. !     obj->buf = (byte *) malloc(sizeof(byte) * MAX_OBJECT_DATA);
  543. !     strcpy(obj->buf, buf);
  544. !     for (buf = obj->buf; *buf; buf++)
  545. X         if (*buf == '\n')
  546. X            *buf = '\r';
  547. -     obj->mem_memo = obj->buf;
  548. X      return(obj);
  549. X  }
  550. X  
  551. --- 76,87 ----
  552. X  
  553. X      obj = create_object();
  554. X      obj->kind = OBJ_MEMO;
  555. !     obj->mem_memo = (byte *) strsave(buf);
  556. !     if (strlen(buf) >= MAX_OBJECT_DATA)
  557. !        obj->mem_memo[MAX_OBJECT_DATA] = '\0';
  558. !     for (buf = obj->mem_memo; *buf; buf++)
  559. X         if (*buf == '\n')
  560. X            *buf = '\r';
  561. X      return(obj);
  562. X  }
  563. X  
  564. ***************
  565. *** 88,94 ****
  566. X  record    *rec;
  567. X  
  568. X  {    object    *obj;
  569. !     byte    *p;
  570. X      int    i;
  571. X  
  572. X      if (rec->type != REC_MODE)
  573. --- 91,97 ----
  574. X  record    *rec;
  575. X  
  576. X  {    object    *obj;
  577. !     byte    *p, buf[MAX_OBJECT_DATA];
  578. X      int    i;
  579. X  
  580. X      if (rec->type != REC_MODE)
  581. ***************
  582. *** 95,109 ****
  583. X         return(NULL);
  584. X      obj = create_object();
  585. X      obj->from_casio = TRUE;
  586. X      for ( ; rec; rec = rec->next)
  587. X         switch(rec->type) {
  588. !           case REC_DATA     : if (address_kind(rec->address) == REC_DATA_DATA) {
  589. !                            if (obj->buf == NULL) {
  590. !                               obj->buf = (byte *) malloc(sizeof(byte) * MAX_OBJECT_DATA);
  591. !                               bzero(obj->buf, sizeof(byte) * MAX_OBJECT_DATA);
  592. !                               }
  593. !                            bcopy(rec->data, obj->buf + address_start(rec->address), rec->length);
  594. !                            }
  595. X                          else if (address_kind(rec->address) == REC_DATA_ALARM) {
  596. X                             if (obj->kind == OBJ_SCHEDULE)
  597. X                                ascii_to_time(rec->data, &obj->sch_alarm_time, NULL);
  598. --- 98,108 ----
  599. X         return(NULL);
  600. X      obj = create_object();
  601. X      obj->from_casio = TRUE;
  602. +     bzero(buf, sizeof(buf));
  603. X      for ( ; rec; rec = rec->next)
  604. X         switch(rec->type) {
  605. !           case REC_DATA     : if (address_kind(rec->address) == REC_DATA_DATA)
  606. !                            bcopy(rec->data, buf + address_start(rec->address), rec->length);
  607. X                          else if (address_kind(rec->address) == REC_DATA_ALARM) {
  608. X                             if (obj->kind == OBJ_SCHEDULE)
  609. X                                ascii_to_time(rec->data, &obj->sch_alarm_time, NULL);
  610. ***************
  611. *** 177,188 ****
  612. X                          free_object(obj);
  613. X                          return(NULL);
  614. X            }
  615. !     if (obj->buf) {
  616. !        obj->field[0] = obj->buf;
  617. !        for (p = obj->buf, i = 1; *p; p++)
  618. X            if (*p == CASIO_END_ENTRY) {
  619. X               *p = '\0';
  620. !              obj->field[i++] = p + 1;
  621. X               }
  622. X         for ( ; i < MAX_FIELDS; i++)
  623. X            obj->field[i] = NULL;
  624. --- 176,188 ----
  625. X                          free_object(obj);
  626. X                          return(NULL);
  627. X            }
  628. !     if (*buf) {
  629. !        obj->field[0] = buf;
  630. !        for (p = buf, i = 0; *p; p++)
  631. X            if (*p == CASIO_END_ENTRY) {
  632. X               *p = '\0';
  633. !              obj->field[i] = (byte *) strsave(obj->field[i]);
  634. !              obj->field[++i] = p + 1;
  635. X               }
  636. X         for ( ; i < MAX_FIELDS; i++)
  637. X            obj->field[i] = NULL;
  638. ***************
  639. *** 199,205 ****
  640. X  object    *obj;
  641. X  
  642. X  {    record    *head, *rec;
  643. !     int    i;
  644. X      byte    *p, *q;
  645. X  
  646. X      head = rec = make_mode_record(0); /* use a dummy mode value */
  647. --- 199,205 ----
  648. X  object    *obj;
  649. X  
  650. X  {    record    *head, *rec;
  651. !     int    i, last, offset;
  652. X      byte    *p, *q;
  653. X  
  654. X      head = rec = make_mode_record(0); /* use a dummy mode value */
  655. ***************
  656. *** 238,268 ****
  657. X         free_record(head);
  658. X         return(NULL);
  659. X         }
  660. !     for (i = 0; i < MAX_FIELDS; i++)
  661. !        if (p = obj->field[i])
  662. !           do {
  663. !              rec->next = create_record();
  664. !              rec = rec->next;
  665. !              rec->type = REC_DATA;
  666. !              if (q = (byte *) index(p, CASIO_END_LINE))
  667. !                 rec->length = q - p + 1;
  668. !              else
  669. !                 rec->length = strlen(p) + 1;
  670. !              rec->address = REC_DATA_DATA + p - obj->buf;
  671. !              bcopy(p, rec->data, rec->length - 1);
  672. !              if (q) {
  673. !                 rec->data[rec->length - 1] = CASIO_END_LINE;
  674. !                 p = q + 1;
  675. !                 }
  676. !              else if (obj->field[i + 1]) {
  677. !                 rec->data[rec->length - 1] = CASIO_END_ENTRY;
  678. !                 p += rec->length - 1;
  679. !                 }
  680. !              else {
  681. !                 rec->length--;
  682. !                 p += rec->length;
  683. !                 }
  684. !              } while (*p);
  685. X      rec->next = create_record();
  686. X      rec = rec->next;
  687. X      rec->length = 0;
  688. --- 238,269 ----
  689. X         free_record(head);
  690. X         return(NULL);
  691. X         }
  692. !     for (last = MAX_FIELDS; last >= 0 && obj->field[last] == NULL; last--)
  693. !        ;
  694. !     for (i = offset = 0; i <= last; i++) {
  695. !        p = obj->field[i];
  696. !        do {
  697. !           rec->next = create_record();
  698. !           rec = rec->next;
  699. !           rec->type = REC_DATA;
  700. !           rec->address = REC_DATA_DATA + offset;
  701. !           if (p == NULL)
  702. !              rec->length = 0;
  703. !           else if (q = (byte *) index(p, CASIO_END_LINE))
  704. !              rec->length = q - p + 1;
  705. !           else
  706. !              rec->length = strlen(p);
  707. !           if (rec->length > 127)
  708. !              rec->length = 127;
  709. !           if (p) {
  710. !              bcopy(p, rec->data, rec->length);
  711. !              p += rec->length;
  712. !              }
  713. !           if ((p == NULL || *p == '\0') && i < last)
  714. !              rec->data[rec->length++] = CASIO_END_ENTRY;
  715. !           offset += rec->length;
  716. !           } while (p && *p);
  717. !        }
  718. X      rec->next = create_record();
  719. X      rec = rec->next;
  720. X      rec->length = 0;
  721. ***************
  722. *** 277,296 ****
  723. X  object    *obj;
  724. X  
  725. X  {    record    *rec, *r;
  726. X  
  727. !     rec = object_to_record(obj);
  728. !     if (!send_record(rec))
  729. !        return(FALSE);
  730. !     while (rec) {
  731. !        r = rec;
  732. !        rec = rec->next;
  733. !        free_record(r);
  734. X         }
  735. !     if (!wait_for_acknowledgement()) {
  736. !        error("BOSS did not acknowledge receipt of object");
  737. !        return(FALSE);
  738. !        }
  739. !     return(TRUE);
  740. X  }
  741. X  
  742. X  /************************************************************************/
  743. --- 278,305 ----
  744. X  object    *obj;
  745. X  
  746. X  {    record    *rec, *r;
  747. +     int    result, retries;
  748. X  
  749. !     for (retries = 4; retries > 0; retries--) {
  750. !        rec = object_to_record(obj);
  751. !        if (!send_record(rec))
  752. !           return(FALSE);
  753. !        while (rec) {
  754. !           r = rec;
  755. !           rec = rec->next;
  756. !           free_record(r);
  757. !           }
  758. !        if ((result = wait_for_acknowledgement()) == OBJECT_RECEIVED)
  759. !           return(TRUE);
  760. !        else if (result == OBJECT_RESEND)
  761. !           wait_casio(3000); /* let's all catch our breath */
  762. !        else {
  763. !           error("BOSS did not acknowledge receipt of object");
  764. !           return(FALSE);
  765. !           }
  766. X         }
  767. !     error("Transmission aborted due to repeated failures reported by BOSS");
  768. !     return(FALSE);
  769. X  }
  770. X  
  771. X  /************************************************************************/
  772. *** object.h.orig    Wed Jul 24 09:38:47 1991
  773. --- object.h    Wed Jul 17 10:02:34 1991
  774. ***************
  775. *** 67,73 ****
  776. X  
  777. X  struct    o_rec    {int    kind;
  778. X           int    from_casio;
  779. -          byte    *buf;
  780. X           byte    *field[MAX_FIELDS + 1];
  781. X           byte    marked;
  782. X           date    sch_date;
  783. --- 67,72 ----
  784. *** packet.c.orig    Wed Jul 24 09:38:48 1991
  785. --- packet.c    Wed Jul 17 08:25:59 1991
  786. ***************
  787. *** 25,30 ****
  788. --- 25,31 ----
  789. X  
  790. X  #include    "manifest.h"
  791. X  #include    "casio.h"
  792. + #include    "packet.h"
  793. X  
  794. X  PRIVATE    int    session_open = FALSE;
  795. X  PRIVATE    char    hex[] = "0123456789ABCDEF";
  796. ***************
  797. *** 130,136 ****
  798. X               error("error awaiting packet ACK from BOSS");
  799. X               return(FALSE);
  800. X               }
  801. !           else if (b == '?') {
  802. X               disable_flow_control();
  803. X               usleep(20000);
  804. X               i = read_casio(&b, 1, 1000);
  805. --- 131,137 ----
  806. X               error("error awaiting packet ACK from BOSS");
  807. X               return(FALSE);
  808. X               }
  809. !           else if (b == RCV_ERROR) {
  810. X               disable_flow_control();
  811. X               usleep(20000);
  812. X               i = read_casio(&b, 1, 1000);
  813. ***************
  814. *** 217,226 ****
  815. X  
  816. X      if (read_casio(&b, 1, 60000) == 1)
  817. X         if (b == PACKET_ACK)
  818. !           return(TRUE);
  819. X         else
  820. X            error("invalid object acknowledgement: %c (%02x)", b, b);
  821. X      else
  822. X         error("no acknowledgement received from BOSS");
  823. !     return(FALSE);
  824. X  }
  825. --- 218,229 ----
  826. X  
  827. X      if (read_casio(&b, 1, 60000) == 1)
  828. X         if (b == PACKET_ACK)
  829. !           return(OBJECT_RECEIVED);
  830. !        else if (b == XMIT_ERROR)
  831. !           return(OBJECT_RESEND);
  832. X         else
  833. X            error("invalid object acknowledgement: %c (%02x)", b, b);
  834. X      else
  835. X         error("no acknowledgement received from BOSS");
  836. !     return(OBJECT_ERROR);
  837. X  }
  838. *** packet.h.orig    Wed Jul 24 09:38:49 1991
  839. --- packet.h    Wed Jul 17 08:26:01 1991
  840. ***************
  841. *** 35,40 ****
  842. --- 35,44 ----
  843. X  #define        PORT_TTYA        0
  844. X  #define        PORT_TTYB        1
  845. X  
  846. + #define        OBJECT_RECEIVED        0
  847. + #define        OBJECT_RESEND        1
  848. + #define        OBJECT_ERROR        2
  849. X  PUBLIC    int    start_session();
  850. X  PUBLIC    int    send_packet();
  851. X  PUBLIC    int    receive_packet();
  852. *** parse.y.orig    Wed Jul 24 09:38:49 1991
  853. --- parse.y    Wed Jul 17 14:56:06 1991
  854. ***************
  855. *** 79,85 ****
  856. X                           parsed_object_list = $2;
  857. X                        else
  858. X                           $1->next = $2;
  859. -                       fill_fields($2);
  860. X                        $$ = $2;
  861. X                      }
  862. X          ;
  863. --- 79,84 ----
  864. ***************
  865. *** 109,131 ****
  866. X  phone_attr    :    marked
  867. X                      { curr_object->marked = TRUE; }
  868. X          |    name
  869. !                     { add_field(&(curr_object->pho_name), $1); }
  870. X          |    number
  871. !                     { add_field(&(curr_object->pho_number), $1); }
  872. X          |    address
  873. !                     { add_field(&(curr_object->pho_address), $1); }
  874. X          |    extra_1
  875. !                     { add_field(&(curr_object->pho_extra_1), $1); }
  876. X          |    extra_2
  877. !                     { add_field(&(curr_object->pho_extra_2), $1); }
  878. X          |    extra_3
  879. !                     { add_field(&(curr_object->pho_extra_3), $1); }
  880. X          |    extra_4
  881. !                     { add_field(&(curr_object->pho_extra_4), $1); }
  882. X          |    extra_5
  883. !                     { add_field(&(curr_object->pho_extra_5), $1); }
  884. X          |    extra_6
  885. !                     { add_field(&(curr_object->pho_extra_6), $1); }
  886. X          ;
  887. X  
  888. X  schedule_object    :    LBRACE SCHEDULE
  889. --- 108,130 ----
  890. X  phone_attr    :    marked
  891. X                      { curr_object->marked = TRUE; }
  892. X          |    name
  893. !                     { curr_object->pho_name = (byte *) $1; }
  894. X          |    number
  895. !                     { curr_object->pho_number = (byte *) $1; }
  896. X          |    address
  897. !                     { curr_object->pho_address = (byte *) $1; }
  898. X          |    extra_1
  899. !                     { curr_object->pho_extra_1 = (byte *) $1; }
  900. X          |    extra_2
  901. !                     { curr_object->pho_extra_2 = (byte *) $1; }
  902. X          |    extra_3
  903. !                     { curr_object->pho_extra_3 = (byte *) $1; }
  904. X          |    extra_4
  905. !                     { curr_object->pho_extra_4 = (byte *) $1; }
  906. X          |    extra_5
  907. !                     { curr_object->pho_extra_5 = (byte *) $1; }
  908. X          |    extra_6
  909. !                     { curr_object->pho_extra_6 = (byte *) $1; }
  910. X          ;
  911. X  
  912. X  schedule_object    :    LBRACE SCHEDULE
  913. ***************
  914. *** 158,164 ****
  915. X          |    alarm_time
  916. X                      { curr_object->sch_alarm_time = *$1; }
  917. X          |    memo
  918. !                     { add_field(&(curr_object->sch_memo), $1); }
  919. X          ;
  920. X  
  921. X  memo_object    :    LBRACE MEMO
  922. --- 157,163 ----
  923. X          |    alarm_time
  924. X                      { curr_object->sch_alarm_time = *$1; }
  925. X          |    memo
  926. !                     { curr_object->sch_memo = (byte *) $1; }
  927. X          ;
  928. X  
  929. X  memo_object    :    LBRACE MEMO
  930. ***************
  931. *** 179,185 ****
  932. X  memo_attr    :    marked
  933. X                      { curr_object->marked = TRUE; }
  934. X          |    memo
  935. !                     { add_field(&(curr_object->sch_memo), $1); }
  936. X          ;
  937. X  
  938. X  card_object    :    LBRACE CARD
  939. --- 178,184 ----
  940. X  memo_attr    :    marked
  941. X                      { curr_object->marked = TRUE; }
  942. X          |    memo
  943. !                     { curr_object->sch_memo = (byte *) $1; }
  944. X          ;
  945. X  
  946. X  card_object    :    LBRACE CARD
  947. ***************
  948. *** 202,236 ****
  949. X  card_attr    :    marked
  950. X                      { curr_object->marked = TRUE; }
  951. X          |    employer
  952. !                     { add_field(&(curr_object->car_employer), $1); }
  953. X          |    name
  954. !                     { add_field(&(curr_object->car_name), $1); }
  955. X          |    number
  956. !                     { add_field(&(curr_object->car_number), $1); }
  957. X          |    position
  958. !                     { add_field(&(curr_object->car_position), $1); }
  959. X          |    department
  960. !                     { add_field(&(curr_object->car_department), $1); }
  961. X          |    pobox
  962. !                     { add_field(&(curr_object->car_pobox), $1); }
  963. X          |    address
  964. !                     { add_field(&(curr_object->car_address), $1); }
  965. X          |    telex
  966. !                     { add_field(&(curr_object->car_telex), $1); }
  967. X          |    fax
  968. !                     { add_field(&(curr_object->car_fax), $1); }
  969. X          |    extra_1
  970. !                     { add_field(&(curr_object->car_extra_1), $1); }
  971. X          |    extra_2
  972. !                     { add_field(&(curr_object->car_extra_2), $1); }
  973. X          |    extra_3
  974. !                     { add_field(&(curr_object->car_extra_3), $1); }
  975. X          |    extra_4
  976. !                     { add_field(&(curr_object->car_extra_4), $1); }
  977. X          |    extra_5
  978. !                     { add_field(&(curr_object->car_extra_5), $1); }
  979. X          |    extra_6
  980. !                     { add_field(&(curr_object->car_extra_6), $1); }
  981. X          ;
  982. X  
  983. X  calendar_object    :    LBRACE CALENDAR
  984. --- 201,235 ----
  985. X  card_attr    :    marked
  986. X                      { curr_object->marked = TRUE; }
  987. X          |    employer
  988. !                     { curr_object->car_employer = (byte *) $1; }
  989. X          |    name
  990. !                     { curr_object->car_name = (byte *) $1; }
  991. X          |    number
  992. !                     { curr_object->car_number = (byte *) $1; }
  993. X          |    position
  994. !                     { curr_object->car_position = (byte *) $1; }
  995. X          |    department
  996. !                     { curr_object->car_department = (byte *) $1; }
  997. X          |    pobox
  998. !                     { curr_object->car_pobox = (byte *) $1; }
  999. X          |    address
  1000. !                     { curr_object->car_address = (byte *) $1; }
  1001. X          |    telex
  1002. !                     { curr_object->car_telex = (byte *) $1; }
  1003. X          |    fax
  1004. !                     { curr_object->car_fax = (byte *) $1; }
  1005. X          |    extra_1
  1006. !                     { curr_object->car_extra_1 = (byte *) $1; }
  1007. X          |    extra_2
  1008. !                     { curr_object->car_extra_2 = (byte *) $1; }
  1009. X          |    extra_3
  1010. !                     { curr_object->car_extra_3 = (byte *) $1; }
  1011. X          |    extra_4
  1012. !                     { curr_object->car_extra_4 = (byte *) $1; }
  1013. X          |    extra_5
  1014. !                     { curr_object->car_extra_5 = (byte *) $1; }
  1015. X          |    extra_6
  1016. !                     { curr_object->car_extra_6 = (byte *) $1; }
  1017. X          ;
  1018. X  
  1019. X  calendar_object    :    LBRACE CALENDAR
  1020. ***************
  1021. *** 400,449 ****
  1022. X      error(buf1);
  1023. X      yyclearin;
  1024. X      parse_errors_occured++;
  1025. - }
  1026. - /************************************************************************/
  1027. - PRIVATE    add_field(field, value)
  1028. - byte    **field;
  1029. - byte    *value;
  1030. - {    byte    *p;
  1031. -     if (*field)
  1032. -        yyerror("duplicate value for this field");
  1033. -     if (value == NULL || *value == '\0')
  1034. -        return;
  1035. -     if (curr_object->buf == NULL) {
  1036. -        curr_object->buf = (byte *) malloc(MAX_OBJECT_DATA);
  1037. -        bzero(curr_object->buf, MAX_OBJECT_DATA);
  1038. -        }
  1039. -     for (p = curr_object->buf + MAX_OBJECT_DATA - 1; p > curr_object->buf && *p == '\0'; p--)
  1040. -        ;
  1041. -     if (*p)
  1042. -        p += 2;
  1043. -     if (p + strlen(value) >= curr_object->buf + MAX_OBJECT_DATA) {
  1044. -        yyerror("too much data for this object");
  1045. -        *field = NULL;
  1046. -        }
  1047. -     else {
  1048. -        strcpy(p, value);
  1049. -        *field = p;
  1050. -        }
  1051. - }
  1052. - /************************************************************************/
  1053. - PRIVATE    fill_fields(obj)
  1054. - object    *obj;
  1055. - {    int    i;
  1056. -     for (i = MAX_FIELDS - 1; i >= 0; i--)
  1057. -        if (obj->field[i])
  1058. -           for (i--; i >= 0; i--)
  1059. -              if (obj->field[i] == NULL)
  1060. -                 add_field(&(obj->field[i]), "");
  1061. X  }
  1062. X  
  1063. X  #include "lex.c"
  1064. --- 399,404 ----
  1065. *** patchlevel.h.orig    Wed Jul 24 09:38:50 1991
  1066. --- patchlevel.h    Wed Jul 24 09:34:28 1991
  1067. ***************
  1068. *** 19,33 ****
  1069. X  
  1070. X  /************************************************************************/
  1071. X  /*                                    */
  1072. ! /*    0    15 Oct 90    Initial release                */
  1073. ! /*                comp.sources.x: Volume 10, Issues 3-8    */
  1074. X  /*                                    */
  1075. ! /*    1     1 Dec 90    Restructured code for maintainability    */
  1076. X  /*                Added "About Boss..."            */
  1077. X  /*                Added warning about downloads at 9600    */
  1078. X  /*                   baud                    */
  1079. X  /*                                    */
  1080. ! /*    2    15 Jan 91    Fixed bug in storing marked records    */
  1081. X  /*                Enhanced dialog placement        */
  1082. X  /*                                    */
  1083. X  /************************************************************************/
  1084. --- 19,40 ----
  1085. X  
  1086. X  /************************************************************************/
  1087. X  /*                                    */
  1088. ! /*    0    15 Oct 90    comp.sources.x: Volume 10, Issues 3-8    */
  1089. ! /*                Initial release                */
  1090. X  /*                                    */
  1091. ! /*    1     1 Dec 90    comp.sources.x: Volume 10, Issue 91    */
  1092. ! /*                Restructured code for maintainability    */
  1093. X  /*                Added "About Boss..."            */
  1094. X  /*                Added warning about downloads at 9600    */
  1095. X  /*                   baud                    */
  1096. X  /*                                    */
  1097. ! /*    2    15 Jan 91    comp.sources.x: Volume 11, Issue 4    */
  1098. ! /*                Fixed bug in storing marked records    */
  1099. X  /*                Enhanced dialog placement        */
  1100. + /*                                    */
  1101. + /*    3    24 Jul 91    comp.sources.x: Volume ??, Issue ??    */
  1102. + /*                Fixed unget_byte bug            */
  1103. + /*                Added transmission delay support    */
  1104. + /*                Fixed bug in object field management    */
  1105. X  /*                                    */
  1106. X  /************************************************************************/
  1107. *** protocol.h.orig    Wed Jul 24 09:38:53 1991
  1108. --- protocol.h    Wed Jun 19 10:18:46 1991
  1109. ***************
  1110. *** 31,33 ****
  1111. --- 31,34 ----
  1112. X  #define        DISABLE_FLOW_CONTROL    5
  1113. X  #define        FLUSH_CASIO        6
  1114. X  #define        UNGET_BYTE        7
  1115. + #define        WAIT_CASIO        8
  1116. SHAR_EOF
  1117. chmod 0664 patch ||
  1118. echo 'restore of patch failed'
  1119. Wc_c="`wc -c < 'patch'`"
  1120. test 32133 -eq "$Wc_c" ||
  1121.     echo 'patch: original size 32133, current size' "$Wc_c"
  1122. fi
  1123. exit 0
  1124.  
  1125. --
  1126. Dan Heller
  1127. O'Reilly && Associates       Z-Code Software    Comp-sources-x:
  1128. Senior Writer                President          comp-sources-x@uunet.uu.net
  1129. argv@ora.com                 argv@zipcode.com
  1130.